新项目需要使用MVC+EF+MySQL,以前使用的数据库都是微软的亲儿子SQL Server,所以在使用的时候基本没有遇到过什么问题,但是这次在使用MySQL的时候却一直出现问题,看到的博客很多,千篇一律还没能解决问题,整理此博客,用以记录与分享

EF如何使用SQL Server作为数据源不再多说,不太了解的话查看此博客,下面将讲述EF如何使用MySQL ,本次开发环境为 VS2017,MySQL版本为:MySQL5.5(影响不大)


[TOC]

1.配置环境

添加实体数据模型
在项目 > 添加 > 新建项 > 数据 > ADO.NET实体数据模型 > 添加 > 从数据生成 > 新建连接

选择数据源
选择数据源

在这里可以看到,并没有MySQL的数据源。
这是因为没有安装MySQL与VS的集成组件下载地址和MySQL连接组件下载地址,安装完毕后就有了。
在这里插入图片描述
在这里插入图片描述

2.使用Nuget 安装 MySQL.Data.Entity 和 MySQL.Data

划重点,这里容易出问题

常见问题

(1) .闪退

在上一步,安装完 mysql-connector-net 组件mysql-for-visualstudio 组件后,虽然在VS上出现了 MySQL Database 选项,但是如果直接点击继续的话,会出现闪退。这是因为没有在Nuget中安装 MySQL.Data.Entity 和 MySQL.Data 这两个包。

如同在使用 SQL Server 作为数据源的时候,需要在 Nuget 中安装 EntityFramwork 包,才能正常创建ADO.NET实体数据模型,这里也是一样,如果不安装 MySQL.Data.Entity 和 MySQL.Data 这两个包,同样无法创建以 MySQL 为数据源的 ADO.NET 实体数据模型。

(2) .您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库提供程序……

上面在Nuget中,安装过 MySQL.Data.Entity 和 MySQL.Data 这两个包后,应该就可以进入下一步了,但是这里面可能还会遇到另外一个问题 您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库提供程序…… 如图所示:

您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库提供程序
您的项目引用了最新实体框架;但是,找不到数据链接所需的与版本兼容的实体框架数据库提供程序

这个问题困扰了我很久,在网上找到了很多关于这个问题的博客,虽然博主都给了解决方案,但是我使用那些解决方案并没有能很好的解决问题,最后找到了其他的、更简单的解决方案解决了问题

大家还记得前面安装的 mysql-connector-net 组件 吗, MySQL官网上这个组件的版本最新的是 8.0.12,但是 VS2017 的 Nuget 包管理器中 MySQL.Data.Entity 稳定版最新版本为6.10.8 MySQL.Data稳定版最新版本为 8.0.12 ,出现上面的报错,就是因为这三者版本不一致,三者版本必须一致 ,否则就会报这个错误!

三者版本
三者版本

可以先添加指定版本的 MySQL.Data.Entity 这样会自动添加上对应版本的 MySQL.Data

这样就可以顺利创建 ADO.NET实体数据模型了

在这里插入图片描述
在这里插入图片描述

(3) .上述三者版本一致,但是仍然不能正常创建

检查项目的 .netframwork 版本,不同的 MySQL.Data.Entity 版本有不同的 .netframwork 最低版本支持,在 packages 文件夹或 Nuget 中查看所需支持的最低 .netframwork 版本,检测所建项目的 .netframwork 版本是否符合要求。

(4) 给定关键字不在字典中

这个问题开始并没有碰到,一切正常,不过后来在别人电脑上操作,上午创建一切正常,但是下午就出现了这个问题,然后就一直无法创建,在CSDN上发现了一篇博客,解决了问题,后面为参考博客原文:

——————————————————————参考博客———————————————————————

导致这个问题的原因有很多,比如数据库编码不一致、mysql connector的版本不一致等等

解决办法:

1.确报VS中使用的MySQL版本(NuGet获取相应即可)与当前电脑安装的Mysql Connector版本一致;

2.关闭VS ,在系统盘中找到文件 DefaultView.SEView 并删除。

通常路径为:用户\AppData\Microsoft\VisualStudio\xx\ServerExplorer

参考原文链接:https://blog.csdn.net/iceagezh/article/details/78924154

——————————————————————参考博客End—————————————————————

我使用的是第二种方案解决的问题,因为前面三者的版本都一致,不过 DefaultView.SEView 这个文件并不是很好找,根据博主给的地址没有找到,我使用的是 Everything 软件找到的这个文件,并删除,找到了2个这个文件,都删除了,通过删除后的VS的状态,怀疑这个文件是用来保存每次连接数据库的信息文件,因为删除过这个文件后曾经在VS中使用EF连接数据库的账号密码都清空了,不过已经能正常创建 ADO.NET 实体数据模型了。

总结

这次遇到了不少的问题,但是本质上来说也算不上是特别严重的问题,VS2017是真的好用,微软对亲儿子和其他人家的儿子态度真是不同!下面是问题解决总结:

  1. 安装 mysql-connector-net 组件mysql-for-visualstudio 组件,mysql-for-visualstudio 组件无版本要求,但是 mysql-connector-net 组件需要与后面在 Nuget 中引用的 MySQL.Data.Entity 和 MySQL.Data 版本一致。如果不安装这两个组件,在选择数据源的时候不会出现MySQL Database选项
  2. “引用了最新的实体框架,但是找不到数据链接所需的与版本兼容的实体框架数据库提供程序…”,检查 mysql-connector-net 组件、 MySQL.Data.Entity 包、MySQL.Data 包,三者的版本是否一致
  3. 不能引用 MySQL.Data.Entity 包、MySQL.Data 包,检查项目的 .netframework 版本是否满足这两个包的最低版本需求。
  4. “给定关键字不在字典中”,关闭VS,找到并删除 DefaultView.SEView 文件。